StarCoder 代码助手: 愿源代码与你同在!
StarCoder: 最先进的 LLM
BigCode
官网:BigCode[1]
GitHub 组织:BigCode Project[2]
BigCode 是由 Hugging Face[3] 和 ServiceNow[4] 共同领导的开放科学协作项目,旨在负责任地开发用于代码的大型语言模型。
Hugging Face,Inc. 是一家美国公司,开发用于构建机器学习应用的工具。该公司最著名的是其用于自然语言处理应用的 transformers 库,以及允许用户共享机器学习模型和数据集的平台。
ServiceNow 是一家美国软件公司,总部位于加利福尼亚州圣塔克拉拉,该公司开发了一个云计算平台,帮助企业管理数字工作流程。ServiceNow 成立于2003年,由 Fred Luddy 创立,已在纽约证券交易所上市,并成为罗素 1000 指数和标准普尔 500 指数的成分股。2018年,福布斯杂志将其评为全球最具创新力的公司之一。
StarCoder
StarCoder 和 StarCoderBase 是针对代码的大型语言模型(Code LLMs),使用 GitHub 上许可证宽松的数据进行训练,包括来自 80 多种编程语言、Git commits、GitHub issues 和 Jupyter notebooks 等。与 LLaMA[5] 类似,训练了一个约 15B 参数的模型,用于处理 1 万亿个标记。针对 35B Python 标记微调了 StarCoderBase 模型,得到一个名为 StarCoder 新模型。
GitHub 宽松许可证指的是一类开源软件许可证,它允许用户自由使用、复制、修改和分发软件,包括用于商业目的,只要在软件的副本和派生作品中保留原始版权声明和许可声明。与严格许可证(如 GPL)不同,宽松许可证并不要求派生作品必须开放源代码或采用相同的许可证发布。一些常见的宽松许可证包括 MIT 许可证[6]、BSD 许可证[7]和 Apache 许可证[8]等。GitHub 上的项目往往使用宽松许可证,以便更容易地分享和合作。
团队发现 StarCoderBase 在流行的编程基准测试中表现优于现有的开源 Code LLMs,并且与 OpenAI 的 code-cushman-001[9] 等封闭模型相匹配或超越。使用超过 8,000 个标记的上下文长度,StarCoder 模型可以处理比任何其他开放 LLM 更多的输入,从而实现了广泛的有趣应用。例如,通过提示 StarCoder 模型进行一系列对话,可以使其充当技术助手,同时还可用于自动完成代码、通过指令修改代码以及用自然语言解释代码片段等多种应用场景。为确保安全开放的模型发布,BigCode 采取了几个重要步骤,包括改进 PII redaction pipeline、新颖的归因跟踪工具,并将 StarCoder 公开发布在改进版本的 OpenRAIL 许可证下。此举不仅有利于大众共享,也方便了企业将模型集成到其产品中的流程。
PII redaction pipeline:
是一种数据处理流程,旨在保护个人身份信息(PII)的隐私性。PII 是可以用于识别个人身份的信息,例如姓名、地址、社会安全号码、银行卡号、驾驶执照号码等。在数据共享或发布的过程中,需要对包含 PII 的数据进行去识别化处理,以确保个人隐私不被泄露。
通常包括以下步骤:预处理、PII 识别、PII 去除和验证。在预处理阶段,数据可能会被清洗、格式化或匿名化,以减少 PII 的识别难度。PII 识别是通过算法或技术来检测和标记数据中包含的 PII 信息。在 PII 去除阶段,PII 信息被替换成无意义的数据,以确保不再包含任何可用于识别个人身份的信息。最后,在验证阶段,数据被检查以确保 PII 已被完全去除。
归因跟踪工具:是用于追踪数据使用和传播的工具。它可以帮助确定数据的来源和流向,以及数据在不同系统和应用程序之间的流动方式。
OpenRAIL:Open & Responsible AI licenses 是一种针对人工智能的特定许可证,允许开放获取、使用和分发 AI 工件,同时要求负责任的使用。OpenRAIL 许可证对于开放和负责任的机器学习(ML),就像当前的开放源代码许可证对于代码和知识共享许可证一样:是一种广泛的社区许可工具。了解更多 OpenRAIL: Towards open and responsible AI licensing frameworks[10]
这一项目的重要性在于,现代社会对于代码开发的需求日益增长,而大型语言模型可以帮助提高代码开发的效率和质量。而 BigCode 项目和 StarCoder 模型则为开发高效、准确和可靠的代码开发工具提供了新的可能性。同时,这也展示了开源技术和协作模式的优势,通过跨领域的合作,共同推动技术的发展,为更多人创造更好的开发工具和产品。
评估
HumanEval:是一个评估工具,用于评估论文“评估在代码上训练的大型语言模型”的 HumanEval 问题解决数据集。它用于衡量从 docstrings 合成程序的功能正确性。它包含 164 个原始的编程问题,评估语言理解、算法和简单数学,其中一些与简单的软件面试问题相当。
论文:Evaluating Large Language Models Trained on Code[11]
网站:Code Generation on HumanEval[12]
数据集:datasets/openai_humaneval[13]
对 StarCoder 和几个类似的模型以及各种基准进行了全面评估。一个流行的 Python 基准是 HumanEval,它测试模型是否可以根据函数的签名和文档字符串完成函数。团队发现,尽管 StarCoder 和 StarCoderBase 规模相对较小,但它们的性能表现优于最大的模型,包括 PaLM、LaMDA 和 LLaMA。它们还优于 CodeGen-16B-Mono 和 OpenAI 的 code-cushman-001(12B)模型。还注意到模型的失败案例是它会产生 # Solution here code
,可能是因为这种代码通常是练习的一部分。为了强制模型生成实际解决方案,在团队添加了提示<filename>solutions/solution_1.py\n# Here is the correct implementation of the code exercise
后显着提高了 StarCoder 的 HumanEval 分数,从 34% 提高到 40% 以上,创造了开放模型的新的最优结果。还尝试了对 CodeGen 和 StarCoderBase 使用此提示符,但没有观察到太大的差异。
ModelLLaMA-7B | HumanEval10.5 | MBPP17.7 |
ModelLaMDA-137B | HumanEval14.0 | MBPP14.8 |
ModelLLaMA-13B | HumanEval15.8 | MBPP22.0 |
ModelCodeGen-16B-Multi | HumanEval18.3 | MBPP20.9 |
ModelLLaMA-33B | HumanEval21.7 | MBPP30.2 |
ModelCodeGeeX | HumanEval22.9 | MBPP24.4 |
ModelLLaMA-65B | HumanEval23.7 | MBPP37.7 |
ModelPaLM-540B | HumanEval26.2 | MBPP36.8 |
ModelCodeGen-16B-Mono | HumanEval29.3 | MBPP35.3 |
ModelStarCoderBase | HumanEval30.4 | MBPP49.0 |
Modelcode-cushman-001 | HumanEval33.5 | MBPP45.9 |
ModelStarCoder | HumanEval33.6 | MBPP52.7 |
ModelStarCoder-Prompted | HumanEval40.8 | MBPP49.5 |
StarCoder 另一个有趣的点是,它支持多语言,因此也在 MultiPL-E[14] 上对其进行了评估,该基准将 HumanEval 扩展到许多其他语言。团队观察到,在许多语言上,StarCoder 与 code-cushman-001 相匹配或超越其表现。在名为 DS-1000 的数据科学基准上,它明显击败了它以及所有其他开放访问的模型。除了生成代码,该模型还可以充当技术助手!
技术助手
通过详尽的评估,团队发现 StarCoder 在编写代码方面非常有能力。但还想测试它是否可以用作技术助手,毕竟它是在大量文档和 GitHub issues 上进行训练的。受 Anthropic HHH 提示[15]的启发,构建了一个技术助手提示。令人惊讶的是,仅凭提示,该模型就能够充当技术助手并回答与编程相关的请求!
训练数据
该模型是在 The Stack 1.2[16] 的子集上进行训练的。数据集仅包含许可证允许的代码,并包括一种选择退出过程,以便代码贡献者可以从数据集中删除其数据(请参考 Am I in The Stack[17])。此外,还从训练数据中删除了个人身份信息,例如姓名、密码和电子邮件地址。
附加版本
除了模型之外,团队还发布了以下资源和演示:
模型权重,包括 OpenRAIL 许可证的中间检查点
所有用于数据预处理和训练的代码,采用 Apache 2.0 许可证
用于代码模型的全面评估测试工具
用于训练和评估 PII 删除的新 PII 数据集
用于训练的完全预处理数据集
用于查找数据集中生成的代码的代码归属工具
相关信息
论文:💫 StarCoder: May the source be with you!![18]
Blog:StarCoder: A State-of-the-Art LLM for Code[19]
GitHub:bigcode-project/starcoder[20]
StarCoder 模型:bigcode/starcoder[21] 基于 Python 的 StarCoderBase 进一步训练
StarCoderBase 模型:bigcode/starcoderbase[22] 在 The Stack 的 80 多种语言上训练
StarPii 模型:bigcode/starpii[23] 基于 StarEncoder 的 PII 检测器
工具和演示
StarCoder Chat[24]
StarCoder Playground[25]
StarCoder Editor[26]
VSCode 插件 - HF Code Autocomplete[27]
数据和治理
StarCoderData[28]:StarCoder 的预训练数据集
Tech Assistant Prompt[29]:使用此提示,你可以将 StarCoder 转换为技术助手
StarCoder 许可协议[30]:该模型在 BigCode OpenRAIL-M v1 许可协议下许可
StarCoder Search[31]:在预训练数据集中全文搜索代码
StarCoder Membership Test[32]:快速测试代码是否存在于预训练数据集中
References
BigCode: https://www.bigcode-project.org
[2]BigCode Project: https://github.com/bigcode-project
[3]Hugging Face: https://huggingface.co
[4]ServiceNow: https://www.servicenow.com
[5]LLaMA: https://huggingface.co/docs/transformers/main/en/model_doc/llama
[6]MIT 许可证: https://opensource.org/license/mit
[7]BSD 许可证: https://opensource.org/license/bsd-3-clause
[8]Apache 许可证: https://www.apache.org/licenses/LICENSE-2.0
[9]code-cushman-001: https://platform.openai.com/docs/models/codex
[10]OpenRAIL: Towards open and responsible AI licensing frameworks: https://huggingface.co/blog/open_rail#a-change-of-licensing-paradigm-openrail
[11]Evaluating Large Language Models Trained on Code: https://arxiv.org/abs/2107.03374v2
[12]Code Generation on HumanEval: https://paperswithcode.com/sota/code-generation-on-humaneval
[13]datasets/openai_humaneval: https://huggingface.co/datasets/openai_humaneval
[14]MultiPL-E: https://huggingface.co/datasets/nuprl/MultiPL-E
[15]Anthropic HHH 提示: https://gist.github.com/jareddk/2509330f8ef3d787fc5aaac67aab5f11#file-hhh_prompt-txt
[16]The Stack 1.2: https://huggingface.co/datasets/bigcode/the-stack
[17]Am I in The Stack: https://huggingface.co/spaces/bigcode/in-the-stack
[18]💫 StarCoder: May the source be with you!!: https://drive.google.com/file/d/1cN-b9GnWtHzQRoE7M7gAEyivY0kl4BYs/view
[19]StarCoder: A State-of-the-Art LLM for Code: https://huggingface.co/blog/starcoder
[20]bigcode-project/starcoder: https://github.com/bigcode-project/starcoder/tree/main
[21]bigcode/starcoder: https://huggingface.co/bigcode/starcoder
[22]bigcode/starcoderbase: https://huggingface.co/bigcode/starcoderbase
[23]bigcode/starpii: https://huggingface.co/bigcode/starpii
[24]StarCoder Chat: https://huggingface.co/chat
[25]StarCoder Playground: https://huggingface.co/spaces/bigcode/bigcode-playground
[26]StarCoder Editor: https://huggingface.co/spaces/bigcode/bigcode-editor
[27]VSCode 插件 - HF Code Autocomplete: https://marketplace.visualstudio.com/items?itemName=HuggingFace.huggingface-vscode
[28]StarCoderData: https://huggingface.co/datasets/bigcode/starcoderdata
[29]Tech Assistant Prompt: https://huggingface.co/datasets/bigcode/ta-prompt
[30]StarCoder 许可协议: https://huggingface.co/spaces/bigcode/bigcode-model-license-agreement
[31]StarCoder Search: https://huggingface.co/spaces/bigcode/search
[32]StarCoder Membership Test: https://stack.dataportraits.org